package com.yunhe.option.service.data;

import com.yunhe.option.domain.data.Price;
import com.yunhe.common.exception.ArgumentErrorException;
import com.yunhe.common.exception.UniqueConstraintsException;
import com.yunhe.common.model.PageParam;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * 价格Service
 * @desc 价格服务类定义
 * @author liuronglei
 */
public interface PriceService {

    /**
     * 新增价格对象
     * @param price 价格对象
     */
    @Transactional
    Price createPrice(Price price)
            throws ArgumentErrorException, UniqueConstraintsException;

    /**
     * 批量新增价格对象
     * @param priceList 价格对象列表
     */
    @Transactional
    Iterable<Price> createPrice(List<Price> priceList)
            throws ArgumentErrorException, UniqueConstraintsException;

    /**
     * 根据地区代码和类型ID删除价格对象
     * @param areaCode 地区代码
     * @param typeCode 类型代码
     */
    @Transactional
    Long deletePriceByAreaCodeAndTypeCode(Long areaCode, Long typeCode);

    /**
     * 根据时间范围更新价格
     * @param areaCode 地区代码
     * @param typeCode 类型代码
     * @param dtime 时间范围
     * @param val 值
     */
    @Transactional
    List<Price> updatePrices(Long areaCode, Long typeCode, List<Date> dtime, Double val);

    /**
     * 更新价格
     * @param areaCode 地区代码
     * @param typeCode 类型代码
     * @param dtime 时间范围
     * @param val 值
     */
    @Transactional
    Price updatePrice(Long areaCode, Long typeCode, Date dtime, Double val)
            throws UniqueConstraintsException, ArgumentErrorException;

    /**
     * 根据条件获得价格对象列表
     * @param areaCode 地区代码
     * @param typeCode 类型代码
     * @param dtime 时间
     * @param pageParam 分页对象
     */
    Iterable<Price> findPrices(Long areaCode, Long typeCode, List<Date> dtime, PageParam pageParam);

}
